//
//  StatusListViewModel.swift
//  微博09项目
//
//  Created by mac on 15/9/8.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
import ReactiveCocoa
import SDWebImage
class StatusListViewModel: NSObject {
    //微博数据数组
   // var statuses:[AnyObject]?
    //这一句话，说明statuses一定有值
   lazy var statuses = [SXStatusViewModel]()
    
    //加载微博数据
   
    //isPullupRefresh 判断是否是上路刷新
    func loadStatuses(isPullUpRefreash isPullUpRefreash:Bool) ->RACSignal{
        
        /// 初始刷新：statuses 数组没有内容
        /// 下拉刷新：取statuses 的第一项的 id 作为 since_id
        var since_id = statuses.first?.status.id ?? 0
        var max_id = 0
        /// 上拉刷新: 取 statuses 的最后一项的 id 作为 max_id
        if isPullUpRefreash {
            since_id = 0
            max_id = statuses.last?.status.id ?? 0
        }
       //为了避免循环引用，因此，在这个地方添加了一个弱引用
        return RACSignal.createSignal({ [weak self](subscriber) -> RACDisposable! in
           
            //网络工具，执行的时候，会对self 进行强引用，网络访问结束后，会对self 的引用释放
            NetworkTools.shareTools.loadStatus(since_id: since_id, max_id: max_id).subscribeNext({ (result) -> Void in
               // 1. 获取 result 中的 statuses 字典数组
                guard let array = result["statuses"] as? [[String: AnyObject]] else{
                    printLog("没有正确的数据")
                     subscriber.sendError(NSError(domain: "com.itheima.error", code: -1002, userInfo: ["error message": "没有正确数据"]))
                    return
                }
               
                //2,字典转模型，SXStatusViewModel模型在statuses刚创建的时候就已经被添加，所以这里不需要添加
//                if self.statuses == nil{
//                    self.statuses = [SXStatusViewModel]()
//                }
                //遍历数组
                var arrayM = [SXStatusViewModel]()
                for dict in array{
                   arrayM.append(SXStatusViewModel(status:Status(dict: dict)))
                }
                //给微博模型赋值
               // print(self!.statuses.count)
                print("刷新到\(arrayM.count)条数据")
               self?.cacheWebImage(arrayM) {
                if max_id > 0{
                     self?.statuses += arrayM
                }else
                {
                    self?.statuses = arrayM + self!.statuses
                }
               
                //如果是下拉刷新控件，通知订阅者
                if since_id > 0 {
                    //RAC是OC，的通知订阅者，下拉的数据
                    subscriber.sendNext(arrayM.count)
                }
                //3,通知调用方数据加载完成
                subscriber.sendCompleted()
               }
                
                
                }, error: { (error) -> Void in
                    subscriber.sendError(error)
                }, completed: {})
            
            return nil
        })
    }
    //在原来的基础上添加尾随闭包
    private func cacheWebImage(array:[SXStatusViewModel],filish:() -> ()){
        //1，定义调度组
       let group = dispatch_group_create()
        //记录图像的大小
        var dataLength = 0
        //遍历数组
        for viewModel in array{
            //目标是缓存单张图片
            let count = viewModel.thumbnailURLs?.count ?? 0
            if count != 1{
                continue
            }
            print(viewModel.thumbnailURLs)
            //2，进入调度组
            dispatch_group_enter(group)
            //调用核心下载viewModel.thumbnailURLs![0]注意缓存的时候一定记住缓存的是数组的第一个元素，因为数组里面就只有一个元素
            SDWebImageManager.sharedManager().downloadImageWithURL(viewModel.thumbnailURLs![0], options: [], progress: nil, completed: { (image, _, _, _, _) -> Void in
                if image != nil{
                    //缓存图片只能以二进制的形式缓存
                    let data = UIImagePNGRepresentation(image)
                    //计算缓存图片的长度
                    dataLength += data!.length ?? 0
                }
                //关闭调度组
                dispatch_group_leave(group)
            })
           
        }
        //调度组监听
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
             print("完成缓存 \(dataLength/1024)k")
           
            //执行闭包
            filish()
        }
        
    }
//    private func cacheWebImage(array:[SXStatusViewModel],finish:() ->()){
//        //1，定义调度组
//        let group = dispatch_group_create()
//        //记录图像的大小
//        var dataLength = 0
//        //遍历数组
//        for viewModel in array{
//            //目标是缓存单张图片
//            let count = viewModel.thumbnailURLs?.count ?? 0
//            if count != 1{
//                continue
//            }
//            print(viewModel.thumbnailURLs)
//            //2，进入调度组
//            dispatch_group_enter(group)
//            //调用核心下载viewModel.thumbnailURLs![0]注意缓存的时候一定记住缓存的是数组的第一个元素，因为数组里面就只有一个元素
//            SDWebImageManager.sharedManager().downloadImageWithURL(viewModel.thumbnailURLs![0], options: [], progress: nil, completed: { (image, _, _, _, _) -> Void in
//                if image != nil{
//                    //缓存图片只能以二进制的形式缓存
//                    let data = UIImagePNGRepresentation(image)
//                    //计算缓存图片的长度
//                    dataLength += data!.length ?? 0
//                }
//                //关闭调度组
//                dispatch_group_leave(group)
//            })
//        }
//        //调度组监听
//        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
//            print("完成缓存 \(dataLength/1024)k")
//        }
//        
//    }

}
